package com.demo.behavioral.mediator;

/**
 * 中介者模式
 * 中介者模式也是用来降低类类之间的耦合的，因为如果类类之间有依赖关系的话，不利于功能的拓展和维护，因为只要修改一个对象，其它关联的对象都得进行修改。
 * 如果使用中介者模式，只需关心和Mediator类的关系，具体类类之间的关系及调度交给Mediator就行，这有点像spring容器的作用。
 * 使用一个中介的对象，封装一组对象之间的交互，这样这些对象就可以不用彼此耦合。
 * 应用场景： 当一组对象要进行沟通或者业务上的交互，但是其关系却又很复杂混乱时，可以采用此模式。
 * 所以，在解耦参与者类之间的联系的同时，中介者自身也不免任务过重，因为几乎所有的业务逻辑都交代到中介者身上了，这就是中介者模式的不足之处。
 * 实现方法：1、定义一个中介者接口及实现类，包含多个其他需要相互联系的类及一个处理这些联系的方法
 * 2、定义多个相关的类，这些类可持有中介者实现类，以便可以获取中介者相关信息。
 * @author allen
 *
 */
public class Test {
	
	public static void main(String[] args) {
		//以房屋中介系统为例，客户A向中介系统提供某房报价，中介系统充当中介者，处理某房屋下客户B客户A的相关事宜
		//初始化中介系统及其全部组成类
		LettingAgent lettingAgent = new LettingAgent();
		Customer customer = new Customer("客户A",lettingAgent);
		HouseOwner houseOwner = new HouseOwner("客户B",lettingAgent);
		lettingAgent.setCustomer(customer);
		lettingAgent.setHouseOwner(houseOwner);
		
		//首先购房者向中介系统询价（同事类调用中介类）
		customer.getLettingAgentMsg();
		
		//购房者申请购房，中介系统处理购房者和业主关系（中介类处理同事类）
		customer.applicationForPurchase("180W");
		
		//业主查询下购房者报价（同事类调用中介者）
		houseOwner.getLettingAgentMsg();
		
	}

}
